export function createRoute(record, location) {
  let res = [] // /about 、 /about/a -> 父亲在前面 儿子在后面
  if (record) {
    // 循环操作
    while (record) {
      res.unshift(record)
      record = record.parent
    }
  }
  return {
    ...location,
    matched: res
  }
}
class History {
  constructor(router) {
    this.router = router

    // 根据路径创建匹配规则
    this.current = createRoute(null, {
      path: '/'
    })
    // this.current = {path: '/', matched: []}
  }

  // 跳转时都会执行该方法
  transitionTo(location, onComplete) {
    console.log('location', location)
    // 根据不同路径 加载不同组件 this.router.matcher.match(location)
    // 路径变化了  视图还要更新 响应式的数据原理
    let route = this.router.match(location)
    // 这个route 就是当前最新的匹配的结果
    if (
      location === this.current.path &&
      route.matched.length === this.current.matched.length
    )
      return // 防止重复跳转

    this.updateRoute(route)
    console.log('route', route)
    onComplete && onComplete()
  }

  // 更新路由
  updateRoute(route) {
    this.current = route // 每次切换都会更改current属性
    this.cb && this.cb(route)
  }

  listen(cb) {
    this.cb = cb
  }
}

export { History }
